]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Revert "Revert "keyboard: Handle touch events""
authorRui Matos <tiagomatos@gmail.com>
Mon, 1 Jun 2015 15:21:08 +0000 (16:21 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Tue, 2 Jun 2015 15:57:55 +0000 (17:57 +0200)
And make these only handled on wayland. There's a plethora of issues
around touch passive grab and touch/pointer doubly handling to use
these right away on X11, so we stick to single-touch/pointer there.

This reverts commit 032a688a72110c7f7b976a5b3bd03c3feab32646.

https://bugzilla.gnome.org/show_bug.cgi?id=750287

js/ui/keyboard.js

index 20c45014bdb4665e61123a66cb0ddaff775256d7..3f356b68af2bc7b462b2082f987f4872b3030dc6 100644 (file)
@@ -114,6 +114,35 @@ const Key = new Lang.Class({
                 key.release();
                 return Clutter.EVENT_PROPAGATE;
             }));
+        button.connect('touch-event', Lang.bind(this,
+            function (actor, event) {
+                let device = event.get_device();
+                let sequence = event.get_event_sequence();
+
+                // We only handle touch events here on wayland. On X11
+                // we do get emulated pointer events, which already works
+                // for single-touch cases. Besides, the X11 passive touch grab
+                // set up by Mutter will make us see first the touch events
+                // and later the pointer events, so it will look like two
+                // unrelated series of events, we want to avoid double handling
+                // in these cases.
+                if (!Meta.is_wayland_compositor())
+                    return Clutter.EVENT_PROPAGATE;
+
+                if (!this._touchPressed &&
+                    event.type() == Clutter.EventType.TOUCH_BEGIN) {
+                    device.sequence_grab(sequence, actor);
+                    this._touchPressed = true;
+                    key.press();
+                } else if (this._touchPressed &&
+                           event.type() == Clutter.EventType.TOUCH_END &&
+                           device.sequence_get_grabbed_actor(sequence) == actor) {
+                    device.sequence_ungrab(sequence);
+                    this._touchPressed = false;
+                    key.release();
+                }
+                return Clutter.EVENT_PROPAGATE;
+            }));
 
         return button;
     },